package com.example;

import com.alibaba.druid.pool.DruidDataSource;
import com.example.config.ServerConfig;
import org.omg.PortableServer.Servant;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
// bean属性的绑定---配置文件
@SpringBootApplication
//使用EnableConfigurationProperties 表明我们可以配置哪些类的属性绑定
//注意 使用了这个注解 对应的那个类就不能加Component等注解交给Spring管理 因为使用这个注解已经把对应的类交给了Spring
//即EnableConfigurationProperties 与Component等注解不能同时使用
@EnableConfigurationProperties({ServerConfig.class})
public class Application {

//	我们注意到 如果把source中的s大写  那么就匹配不上 因为ConfigurationProperties中的application.yml是宽松绑定
//	宽松绑定案例：
//		ipAddress=ipaddress=ip_address=ip-address=IPADDRESS=IP_AD-D_R_E_S-S
//	但是 prefix：绑定前缀名规范仅能使用纯小写字母、数字、下划线作为合法字符
//	注意： @Value这个注解却不支持宽松绑定
	@Bean
	@ConfigurationProperties(prefix = "datasource")
	public DruidDataSource dataSource(){
		DruidDataSource dataSource  =new DruidDataSource();
//		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		return dataSource;
	}

	public static void main(String[] args) {
		ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
		ServerConfig bean = applicationContext.getBean(ServerConfig.class);
		System.out.println(bean);
		DruidDataSource dataSource = applicationContext.getBean(DruidDataSource.class);
		System.out.println(dataSource.getDriverClassName());
	}
}
